package stack;

import java.util.Stack;

/**
 * 150.逆波兰表达式
 * 给你一个字符串数组 tokens ，表示一个根据 逆波兰表示法 表示的算术表达式。
 * 请你计算该表达式。返回一个表示表达式值的整数。
 * 注意：
 * ● 有效的算符为 '+'、'-'、'*' 和 '/' 。
 * ● 每个操作数（运算对象）都可以是一个整数或者另一个表达式。
 * ● 两个整数之间的除法总是 向零截断 。
 * ● 表达式中不含除零运算。
 * ● 输入是一个根据逆波兰表示法表示的算术表达式。
 * ● 答案及所有中间计算结果可以用 32 位 整数表示。
 */
public class evalRPN {
    public static int evalRPN(String[] tokens) {
        if (tokens == null || tokens.length == 0)
            return 0;
        Stack<String> stack = new Stack<>();
        for (String token : tokens) {
            if (token.equals("+") || token.equals("-") || token.equals("*") || token.equals("/")) {
                int temp1 = Integer.valueOf(stack.pop());
                int temp2 = Integer.valueOf(stack.pop());
                int temp3 = 0;
                if (token.equals("+")) {
                    temp3 = temp1 + temp2;
                } else if (token.equals("-")) {
                    temp3 = temp2 - temp1;
                } else if (token.equals("*")) {
                    temp3 = temp1 * temp2;
                } else if (token.equals("/")) {
                    temp3 = temp2 / temp1;
                }
                String s = String.valueOf(temp3);
                stack.push(s);
            } else {
                stack.push(token);
            }
        }
        return Integer.valueOf(stack.pop());
    }
    public static void main(String[] args) {
        String[] tokens = {"4","13","5","/","+"};
        System.out.println(evalRPN(tokens));
    }
}
